ในเอลิกซีร์ กระบวนการจะถูกสร้างขึ้นโดยอัตโนมัติเป็นช่วงสั้น ๆ หลังจากฟังก์ชันทำงานเสร็จแล้ว กระบวนการจะสิ้นสุดลง ในการสร้าง กระบวนการที่มีสถานะคงที่ เราใช้การเรียกซ้ำ (recursion) เพื่อให้กระบวนการยังคงดำเนินอยู่ในลูปต่อไป
1. การปรับแต่งการเรียกแบบสุดท้าย (TCO)
หากการกระทำสุดท้ายของฟังก์ชันคือการเรียกตัวเอง ระบบเสมือนของเออร์แลง (BEAM) จะทำการ การปรับแต่งการเรียกแบบสุดท้ายแทนที่จะเพิ่มเฟรมใหม่ลงในสแตก ระบบจะเพียงแค่ กลับไปยังจุดเริ่มต้น ของฟังก์ชันพร้อมอาร์กิวเมนต์ใหม่
def factorial(n, acc), do: _fact(n-1, acc*n) # TCO
def factorial(n), do: n * factorial(n-1) # ไม่ใช่ TCO
def factorial(n), do: n * factorial(n-1) # ไม่ใช่ TCO
2. สถานะคงที่
สถานะจะถูกเก็บรักษาไว้โดยการส่งค่าที่อัปเดตมาเป็นอาร์กิวเมนต์ในการเรียกซ้ำ ด้วยเหตุผลของ TCO ค่าอาร์กิวเมนต์เหล่านี้จะแทนที่พารามิเตอร์เดิมบนสแตกโดยไม่ต้องใช้หน่วยความจำเพิ่มเติม ทำให้ลูปสามารถทำงานได้ไม่สิ้นสุด
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>